/*
 * Copyright (c) 2005 Chris Richardson
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package net.chrisrichardson.ormunit.hibernate;

import java.util.Iterator;

import junit.framework.Assert;

import org.hibernate.mapping.Column;
import org.hibernate.mapping.Property;
import org.hibernate.mapping.Value;

public class HibernateAssertUtil {

  public static void assertColumn(String idColumn, Value identifier) {
    Iterator columnIt = identifier.getColumnIterator();
    Assert.assertTrue(columnIt.hasNext());
    Column column = (Column) columnIt.next();
    Assert.assertFalse("single column mapping expected", columnIt.hasNext());
    if (!idColumn.equalsIgnoreCase(column.getName()))
      Assert.assertEquals(idColumn, column.getName());
  }

  public static void assertPropertyColumn(String idColumn, Property idProperty) {
    Value identifier = idProperty.getValue();
    assertColumn(idColumn, identifier);
  }

  public static void assertPropertyType(Property property, String mappingElement,
      Class<?> type) {
    Value value = property.getValue();
    if (!type.isInstance(value))
      Assert.fail(String.format(
          "Expected property <%s.%s> to be mapped with %s but is instead a %s",
          property.getPersistentClass().getClassName(), property.getName(), mappingElement,
          value.toString()));
  }

}